#include "YCQGeoServiceProviderPlugin.h"
#include "QGeoTiledMappingManagerEngineQGC.h"
#include "QGeoCodingManagerEngineQGC.h"

#include <QtLocation/private/qgeotiledmappingmanagerengine_p.h>

Q_EXTERN_C Q_DECL_EXPORT const char *qt_plugin_query_metadata();
Q_EXTERN_C Q_DECL_EXPORT QT_PREPEND_NAMESPACE(QObject) *qt_plugin_instance();

//-----------------------------------------------------------------------------
/**
 * @brief 创建YC地理服务提供工厂插件的静态插件实例
 * @return 静态插件实例
 */
const QT_PREPEND_NAMESPACE(QStaticPlugin) qt_static_plugin_YCQGeoServiceProviderFactory()
{
    QT_PREPEND_NAMESPACE(QStaticPlugin) plugin = { qt_plugin_instance, qt_plugin_query_metadata};
    return plugin;
}

//-----------------------------------------------------------------------------
/**
 * @brief 创建地理编码管理引擎实例
 * 
 * 根据传入的参数创建QGeoCodingManagerEngineQGC实例，用于处理地理编码相关功能
 * 
 * @param parameters 初始化参数
 * @param error 错误代码指针，用于返回错误状态
 * @param errorString 错误信息字符串指针，用于返回错误描述
 * @return 新创建的地理编码管理引擎实例
 */
QGeoCodingManagerEngine*
YCQGeoServiceProviderFactory::createGeocodingManagerEngine(
    const QVariantMap &parameters, QGeoServiceProvider::Error *error, QString *errorString) const
{
    return new QGeoCodingManagerEngineQGC(parameters, error, errorString);
}

//-----------------------------------------------------------------------------
/**
 * @brief 创建地图渲染管理引擎实例
 * 
 * 根据传入的参数创建QGeoTiledMappingManagerEngineQGC实例，用于处理地图渲染相关功能
 * 
 * @param parameters 初始化参数
 * @param error 错误代码指针，用于返回错误状态
 * @param errorString 错误信息字符串指针，用于返回错误描述
 * @return 新创建的地图渲染管理引擎实例
 */
QGeoMappingManagerEngine*
YCQGeoServiceProviderFactory::createMappingManagerEngine(
    const QVariantMap &parameters, QGeoServiceProvider::Error *error, QString *errorString) const
{
    return new QGeoTiledMappingManagerEngineQGC(parameters, error, errorString);
}

//-----------------------------------------------------------------------------
/**
 * @brief 创建路径规划管理引擎实例
 * 
 * YC中未实现路径规划功能，因此该函数返回空指针
 * 
 * @param parameters 初始化参数（未使用）
 * @param error 错误代码指针（未使用）
 * @param errorString 错误信息字符串指针（未使用）
 * @return 空指针
 */
QGeoRoutingManagerEngine*
YCQGeoServiceProviderFactory::createRoutingManagerEngine(
    const QVariantMap &, QGeoServiceProvider::Error *, QString *) const
{
    // Not implemented for YC
    return nullptr;
}

//-----------------------------------------------------------------------------
/**
 * @brief 创建地点管理引擎实例
 * 
 * YC中未实现地点管理功能，因此该函数返回空指针
 * 
 * @param parameters 初始化参数（未使用）
 * @param error 错误代码指针（未使用）
 * @param errorString 错误信息字符串指针（未使用）
 * @return 空指针
 */
QPlaceManagerEngine*
YCQGeoServiceProviderFactory::createPlaceManagerEngine(
    const QVariantMap &, QGeoServiceProvider::Error *, QString *) const
{
    // Not implemented for YC
    return nullptr;
}